package com.zm.devmag.util;

import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Util {
	
	private MD5Util(){}
	
	public static String getMD5(String plainText){
		try {
			byte[] secretBytes = MessageDigest.getInstance("MD5").digest(plainText.getBytes());
			String md5code = new BigInteger(1, secretBytes).toString(16);
			for (int i = 0; i < 32 - md5code.length(); i++) {
				md5code = "0" + md5code;
			}
			return md5code;
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}

	//b64_md5
	 public static String Encode_B64_MD5(String s) {
        char hexDigits[] = { '0', '1', '2', '3', '4',
                             '5', '6', '7', '8', '9',
                             'A', 'B', 'C', 'D', 'E', 'F' };
        try {
	            byte[] btInput = s.getBytes();
	            	//获得MD5摘要算法的 MessageDigest 对象
	            MessageDigest mdInst = MessageDigest.getInstance("MD5");
	            	//使用指定的字节更新摘要
	            mdInst.update(btInput);
	            //获得密文
	            byte[] md = mdInst.digest();
	            //把密文转换成十六进制的字符串形式
	            int j = md.length;
	            char str[] = new char[j * 2];
	            int k = 0;
	            for (int i = 0; i < j; i++) {
	                byte byte0 = md[i];
	                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
	                str[k++] = hexDigits[byte0 & 0xf];
	            }
	            return new String(str);
	        }
	        catch (Exception e) {
	            e.printStackTrace();
	            return null;
	        }
	   }

		public static String Decode_B64_MD5_String(String str){
			MessageDigest messageDigest = null;  
			  
		    try {  
		        messageDigest = MessageDigest.getInstance("MD5");  
		
		        messageDigest.reset();  
		
		        messageDigest.update(str.getBytes("UTF-8"));  
		    } catch (NoSuchAlgorithmException e) {  
		        System.out.println("NoSuchAlgorithmException caught!");  
		        System.exit(-1);  
		    } catch (UnsupportedEncodingException e) {  
		        e.printStackTrace();  
		    }  
		
		    byte[] byteArray = messageDigest.digest();  
		
		    StringBuffer md5StrBuff = new StringBuffer();  
		
		    for (int i = 0; i < byteArray.length; i++) {              
		        if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)  
		            md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));  
		        else  
		            md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));  
		    }  
		
		    return md5StrBuff.toString();  
		}
}
